/**
 * 配置管理模块
 */
const categorieConfig =  [{
    id: '1',
    type: 'movie',
    name: '电影',
    icon: 'ri-film-line',
    subcategories: [],
    class: [
      '动作片', '喜剧片', '爱情片', '科幻片', '悬疑片', '剧情片', '战争片', '恐怖片',
      '邵氏电影', '4K电影', '动漫电影', '其他片'
    ]
  },
  {
    id: '2',
    type: 'tv',
    name: '电视剧',
    icon: 'ri-tv-line',
    subcategories: [],
    class: [
      '香港剧', '台湾剧', '日本剧', '港剧', '泰剧', '台剧', '韩国剧', '海外剧', '泰国剧',
      '欧美剧', '记录片', '韩剧', '美剧', '日剧', '国产剧', '港澳剧', '大陆剧', '台湾剧',
      '马泰剧', '内地剧'
    ]
  },
  {
    id: '3',
    name: '综艺',
    type: "variety",
    icon: 'ri-radio-line',
    subcategories: [],
    class: [
      '日本综艺', '大陆综艺', '港台综艺', '日韩综艺', '欧美综艺', '韩国综艺', '真人秀',
      '脱口秀', '音乐节目', '选秀节目'
    ]
  },
  {
    id: '4',
    name: '动漫',
    type: "anime",  
    icon: 'ri-gamepad-line',
    subcategories: [],
    class: [
      '日本动漫', '国产动漫', '欧美动漫', '海外动漫', '日韩动漫', '国产动漫', '动画片',
      '港台动漫', '中国动漫', '有声动漫'
    ]
  },
  {
    id: '5',
    name: '其他',
    type: "other",
    icon: 'ri-more-2-fill',
    subcategories: [],
    class: [
      '伦理片', '短剧', '演唱会', '体育赛事', '篮球', '足球', '预告片', '斯诺克', '影视解说',
      '爽文短剧', '写真热舞', '女频恋爱', '反转爽剧', '古装仙侠', '年代穿越', '脑洞悬疑',
      "伦理", "港台三级", "韩国伦理", "西方伦理", "日本伦理", "两性课堂",
      '现代都市'
    ]
  }
]
// 默认配置
const defaultConfig = {
  // 媒体源配置
  sources: [
    {
      id: "default",
      name: "默认源",
      api: "https://api.example.com",
      url: "https://example.com",
      type: "movie",
    },
  ],
  activeSourceId: "default",
  data: {
    categories: [
    ]
  },
  // 界面配置
  ui: {
    theme: "dark",
    sidebarCollapsed: false,
    mediaLibraryOpen: true,
    categoriesOpen: true,
    posterStyle: "poster",
  },

  // 播放器配置
  player: {
    autoPlay: true,
    autoNext: true,
    rememberProgress: true,
    defaultQuality: "1080p",
  },

  // 系统配置
  system: {
    proxy: {
      enabled: false,
      url: "",
      apiKey: "",
    },
    cache: {
      enabled: true,
      size: 500,
    },
    history: {
      enabled: true,
      maxItems: 100,
    },
    autoScrape: false,
    tmdbApiKey: "",
    customJs: "",
  },
  cache:{
    
  }
}

/**
 * 获取配置
 * @returns {Object} 配置对象
 */
function getConfig() {
  try {
    const savedConfig = localStorage.getItem("appConfig")
    if (savedConfig) {
      return JSON.parse(savedConfig)
    }
  } catch (error) {
    console.error("读取配置失败:", error)
  }

  return defaultConfig
}

/**
 * 保存配置
 * @param {Object} config 配置对象
 */
function saveConfig(config) {
  try {
    localStorage.setItem("appConfig", JSON.stringify(config))
    // 触发配置更新事件
    window.dispatchEvent(new CustomEvent("app-config-updated", { detail: config }))
  } catch (error) {
    console.error("保存配置失败:", error)
  }
}

/**
 * 更新部分配置
 * @param {Object} partialConfig 部分配置
 */
function updateConfig(partialConfig) {
  const currentConfig = getConfig()
  const newConfig = { ...currentConfig, ...partialConfig }
  saveConfig(newConfig)
}

/**
 * 更新嵌套配置
 * @param {string} path 配置路径，如 "ui.theme"
 * @param {any} value 配置值
 */
function updateNestedConfig(path, value) {
  const currentConfig = getConfig()
  const newConfig = { ...currentConfig }

  const parts = path.split(".")
  let current = newConfig

  // 遍历路径直到倒数第二个部分
  for (let i = 0; i < parts.length - 1; i++) {
    const part = parts[i]
    if (current[part] === undefined) {
      current[part] = {}
    }
    current = current[part]
  }

  // 设置最后一个属性的值
  const lastPart = parts[parts.length - 1]
  current[lastPart] = value
  saveConfig(newConfig)
}

/**
 * 获取活跃的媒体源
 * @returns {Object|null} 媒体源对象
 */
function getActiveSource() {
  const config = getConfig()
  if (!config.activeSourceId) return config.sources[0] || null

  return config.sources.find((s) => s.id === config.activeSourceId) || config.sources[0] || null
}

/**
 * 设置活跃的媒体源
 * @param {string} sourceId 媒体源ID
 */
function setActiveSource(sourceId) {
  updateNestedConfig("activeSourceId", sourceId)
}

/**
 * 添加媒体源
 * @param {Object} source 媒体源对象
 */
function addSource(source) {
  const config = getConfig()
  const newSources = [...config.sources, source]
  updateNestedConfig("sources", newSources)
}

/**
 * 更新媒体源
 * @param {string} sourceId 媒体源ID
 * @param {Object} source 媒体源对象
 */
function updateSource(sourceId, source) {
  const config = getConfig()
  const sourceIndex = config.sources.findIndex((s) => s.id === sourceId)

  if (sourceIndex >= 0) {
    const newSources = [...config.sources]
    newSources[sourceIndex] = source
    updateNestedConfig("sources", newSources)
  }
}

/**
 * 删除媒体源
 * @param {string} sourceId 媒体源ID
 */
function deleteSource(sourceId) {
  const config = getConfig()
  const newSources = config.sources.filter((s) => s.id !== sourceId)

  // 如果删除的是当前活跃源，重新设置活跃源
  let newActiveSourceId = config.activeSourceId
  if (config.activeSourceId === sourceId) {
    newActiveSourceId = newSources.length > 0 ? newSources[0].id : null
  }

  updateConfig({
    sources: newSources,
    activeSourceId: newActiveSourceId,
  })
}

// 导出函数
window.AppConfig = {
  getConfig,
  saveConfig,
  updateConfig,
  updateNestedConfig,
  getActiveSource,
  setActiveSource,
  addSource,
  updateSource,
  deleteSource,
}
